map weakmap set weakset 区别
set 和 map 主要用于 数据重组 和 数据存储,set 是集合的数据结构
,map 是字典的数据结构
集合与字典的区别:
共同点:集合、字典 可以存储不重复的值 不同点:集合是以[value,value]的形式存储元素;字典是以[key,value]的形式存储
set
set 是 ES6 新增的一种新的数据结构,类似于数组,但是成员唯一且无序,没有重复的值;set 对象允许你存储任何类型的唯一值,无论是原始值或是对象的引用。且本身就是一种构造函数,用于生成 set 数据结构
var set = new Set(); //Object
set.add(2)
// size为元素个数
console.log(set.size) // 1
[1,2,3,4,5].forEach(i=>set.add(i))
console.log(set) // [2,1,3,4,5] 输出只会有一个2
WeakSet
可将若对象存储在一个集合中
weakmap 与 Set 的区别主要在于:
- WeakSet 只能存储对象引用,不能存放值,而 Set 对象可以
- WeakSet 对象中存储的对象值都是被弱引用的,对象会被垃圾回收掉。WeakSet 对象中元素取决于垃圾回收机制有没有运行,运行前后可能会不一致。
- WeakSet 对象无法被遍历,不能拿到它包含的所有元素
map
map 对象保存键值对,任何值都可以作为一个键或一个值
const map = new Map([
[1, 1],
[2, 2],
[3, 3]
])
console.log([...map]) // [[1, 1], [2, 2], [3, 3]]
WeakMap
WeakMap 对象是一组键值对的集合,其中键是弱引用对象,值是可以任意。WeakMap 弱引用的只是键名,键值依然是正常引用。